package com.qianying.dto;


import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 
 * </p>
 *
 * @author zhangcr
 * @since 2025-07-28
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = false)
public class OrderFinanceDTO implements Serializable {


    /**
     * 主键
     */
    private Long id;

    /**
     * 财务状态
     */
    private String state;

    /**
     * 成交总价
     */
    private BigDecimal totalTransactionPrice;

    /**
     * 成本价
     */
    private BigDecimal costPrice;

    /**
     * 其他费用
     */
    private BigDecimal otherPrice;

    /**
     * 毛利
     */
    private BigDecimal grossMargin;

    /**
     * 折扣
     */
    private BigDecimal discountRate;

    /**
     * 开票号码
     */
    private String invoiceNumber;

    /**
     * 开票公司
     */
    private String invoiceCompany;

    /**
     * 折扣原因
     */
    private String discountReason;

    /**
     * 开票日期
     */
    private LocalDateTime invoicingTime;

    /**
     * 开票日期
     */
    public void setInvoicingTime(LocalDateTime invoicingTime) {
        this.invoicingTime = invoicingTime;
        this.isInvoicingTimePresent = true; // 标记字段已传递
    }

    /**
     * 标记字段是否被传递（用于区分未传值 vs 显式 null）
     */
    @JsonIgnore
    private boolean isInvoicingTimePresent;

    /**
     * 发票抬头
     */
    private String invoiceHeader;

    /**
     * 税号
     */
    private String taxNo;

    /**
     * 师傅请款日期
     */
    private LocalDateTime paymentRequestDate;

    /**
     * 师傅请款日期
     */
    public void setPaymentRequestDate(LocalDateTime paymentRequestDate) {
        this.paymentRequestDate = paymentRequestDate;
        this.isPaymentRequestDatePresent = true; // 标记字段已传递
    }

    /**
     * 标记字段是否被传递（用于区分未传值 vs 显式 null）
     */
    @JsonIgnore
    private boolean isPaymentRequestDatePresent;

    /**
     * 付款日期
     */
    private LocalDateTime paymentDate;

    /**
     * 付款日期
     */
    public void setPaymentDate(LocalDateTime paymentDate) {
        this.paymentDate = paymentDate;
        this.isPaymentDatePresent = true; // 标记字段已传递
    }

    /**
     * 标记字段是否被传递（用于区分未传值 vs 显式 null）
     */
    @JsonIgnore
    private boolean isPaymentDatePresent;

    /**
     * 流水单号
     */
    private String serialNo;

//    /**
//     * work_order表主键
//     */
//    private Long orderId;


    /**
     * 收款情况
     */
    private List<OrderFinanceChargeDTO> chargeList;

    /**
     * 其他费用明细
     */
    private List<OrderFinanceOtherChargeDTO> otherChargeList;


}
